package com.xilai.cuteBoy.common.base;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/*************************************************************
 * Description: BaseService接口
 * Author: Liu Junbo
 * CreateTime: 2017/5/2
 * Copyright © 西安喜来快递有限公司 All right reserved
 ************************************************************/
public interface BaseService<Record, Example> {

    /**
     * Record->存储实体
     * Example->构造复杂查询基于Criteria
     * Int: success:1  else:0
     */

    /**
     * 总记录数
     * @param example
     * @return
     */
    int countByExample(Example example);

    /**
     * 删除
     * @param example
     * @return
     */
    int deleteByExample(Example example);

    /**
     * 根据主键删除
     * @param id
     * @return
     */
    int deleteByPrimaryKey(String id);

    /**
     * 插入
     * @param record
     * @return
     */
    int insert(Record record);

    /**
     * 选择插入
     * @param record
     * @return
     */
    int insertSelective(Record record);

    /**
     * 查询Blob类型,多返
     * @param example
     * @return
     */
    List<Record> selectByExampleWithBLOBs(Example example);

    /**
     * 按条件查询,多返
     * @param example
     * @return
     */
    List<Record> selectByExample(Example example);

    /**
     * 按条件查询，单返top1
     * @param example
     * @return
     */
    Record selectFirstByExample(Example example);

    /**
     * 查询Blob类型,单返top1
     * @param example
     * @return
     */
    Record selectFirstByExampleWithBLOBs(Example example);

    /**
     * 主键查询
     * @param id
     * @return
     */
    Record selectByPrimaryKey(String id);

    /**
     * 选择性更新
     * @param record
     * @param example
     * @return
     */
    int updateByExampleSelective(@Param("record") Record record, @Param("example") Example example);

    /**
     * Blob类型更新
     * @param record
     * @param example
     * @return
     */
    int updateByExampleWithBLOBs(@Param("record") Record record, @Param("example") Example example);

    /**
     * 更新
     * @param record
     * @param example
     * @return
     */
    int updateByExample(@Param("record") Record record, @Param("example") Example example);

    /**
     * 按主键条件更新
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Record record);

    /**
     * 按主键更新Blob
     * @param record
     * @return
     */
    int updateByPrimaryKeyWithBLOBs(Record record);

    /**
     * 按主键更新
     * @param record
     * @return
     */
    int updateByPrimaryKey(Record record);

    /**
     * 根据主键集合删除
     * @param ids
     * @return
     */
    int deleteByPrimaryKeys(String ids);

    /**
     * 初始化Mapper
     */
    void initMapper();

}